package model

import (
	"time"
)

// 监控指标类型
const (
	MetricTypeCount      = "count"      // 计数型
	MetricTypeAverage    = "average"    // 平均值
	MetricTypeDuration   = "duration"   // 持续时间
	MetricTypePercentage = "percentage" // 百分比
	MetricTypeStatus     = "status"     // 状态
)

// 实时监控数据类型
const (
	MonitorTypeCall        = "call"        // 呼叫相关
	MonitorTypeAgent       = "agent"       // 座席相关
	MonitorTypeQueue       = "queue"       // 队列相关
	MonitorTypeSystem      = "system"      // 系统相关
	MonitorTypePerformance = "performance" // 性能相关
)

// CallMetric 呼叫监控指标
type CallMetric struct {
	TotalCalls      int64   `json:"total_calls"`      // 总呼叫数
	InboundCalls    int64   `json:"inbound_calls"`    // 呼入呼叫数
	OutboundCalls   int64   `json:"outbound_calls"`   // 呼出呼叫数
	AnsweredCalls   int64   `json:"answered_calls"`   // 已接听呼叫数
	MissedCalls     int64   `json:"missed_calls"`     // 未接听呼叫数
	AbandonedCalls  int64   `json:"abandoned_calls"`  // 放弃呼叫数
	TransferCalls   int64   `json:"transfer_calls"`   // 转接呼叫数
	ConferenceCalls int64   `json:"conference_calls"` // 会议呼叫数
	AvgWaitTime     float64 `json:"avg_wait_time"`    // 平均等待时间(秒)
	AvgTalkTime     float64 `json:"avg_talk_time"`    // 平均通话时间(秒)
	AvgWrapUpTime   float64 `json:"avg_wrap_up_time"` // 平均事后处理时间(秒)
	ServiceLevel    float64 `json:"service_level"`    // 服务水平(%)
	AbandonRate     float64 `json:"abandon_rate"`     // 放弃率(%)
	AnswerRate      float64 `json:"answer_rate"`      // 接通率(%)
}

// AgentMetric 座席监控指标
type AgentMetric struct {
	TotalAgents          int64            `json:"total_agents"`           // 总座席数
	LoggedInAgents       int64            `json:"logged_in_agents"`       // 登录座席数
	AvailableAgents      int64            `json:"available_agents"`       // 可用座席数
	BusyAgents           int64            `json:"busy_agents"`            // 忙碌座席数
	WrapUpAgents         int64            `json:"wrap_up_agents"`         // 事后处理座席数
	UnavailableAgents    int64            `json:"unavailable_agents"`     // 不可用座席数
	AgentStatusBreakdown map[string]int64 `json:"agent_status_breakdown"` // 座席状态明细
}

// QueueMetric 队列监控指标
type QueueMetric struct {
	QueueName       string  `json:"queue_name"`        // 队列名称
	WaitingCalls    int64   `json:"waiting_calls"`     // 等待中的呼叫数
	LongestWaitTime int64   `json:"longest_wait_time"` // 最长等待时间(秒)
	AvgWaitTime     float64 `json:"avg_wait_time"`     // 平均等待时间(秒)
	AgentsLoggedIn  int64   `json:"agents_logged_in"`  // 登录该队列的座席数
	AgentsAvailable int64   `json:"agents_available"`  // 该队列可用座席数
	ServiceLevel    float64 `json:"service_level"`     // 服务水平(%)
	AbandonRate     float64 `json:"abandon_rate"`      // 放弃率(%)
}

// SystemMetric 系统监控指标
type SystemMetric struct {
	CPULoad             float64 `json:"cpu_load"`             // CPU负载(%)
	MemoryUsage         float64 `json:"memory_usage"`         // 内存使用率(%)
	DiskUsage           float64 `json:"disk_usage"`           // 磁盘使用率(%)
	NetworkIn           float64 `json:"network_in"`           // 网络入流量(bytes/s)
	NetworkOut          float64 `json:"network_out"`          // 网络出流量(bytes/s)
	ActiveCalls         int64   `json:"active_calls"`         // 当前活跃呼叫数
	ActiveIVRs          int64   `json:"active_ivrs"`          // 当前活跃IVR会话数
	DatabaseConnections int64   `json:"database_connections"` // 数据库连接数
	RedisConnections    int64   `json:"redis_connections"`    // Redis连接数
}

// RealTimeMonitor 实时监控数据
type RealTimeMonitor struct {
	Timestamp     time.Time     `json:"timestamp"`      // 时间戳
	CallMetrics   CallMetric    `json:"call_metrics"`   // 呼叫指标
	AgentMetrics  AgentMetric   `json:"agent_metrics"`  // 座席指标
	QueueMetrics  []QueueMetric `json:"queue_metrics"`  // 队列指标
	SystemMetrics SystemMetric  `json:"system_metrics"` // 系统指标
}

// MonitorEvent 监控事件
type MonitorEvent struct {
	ID         string                 `json:"id" bson:"_id"`
	Type       string                 `json:"type" bson:"type"`               // 事件类型
	SubType    string                 `json:"sub_type" bson:"sub_type"`       // 事件子类型
	SourceID   string                 `json:"source_id" bson:"source_id"`     // 事件源ID(座席ID/呼叫ID等)
	SourceName string                 `json:"source_name" bson:"source_name"` // 事件源名称
	Details    map[string]interface{} `json:"details" bson:"details"`         // 事件详情
	CreatedAt  time.Time              `json:"created_at" bson:"created_at"`   // 创建时间
}

// DashboardItem 仪表盘项目
type DashboardItem struct {
	ID         string                 `json:"id" bson:"_id"`
	UserID     string                 `json:"user_id" bson:"user_id"`         // 所属用户ID
	Title      string                 `json:"title" bson:"title"`             // 标题
	Type       string                 `json:"type" bson:"type"`               // 类型(chart/stat/table)
	ChartType  string                 `json:"chart_type" bson:"chart_type"`   // 图表类型(line/bar/pie)
	MetricType string                 `json:"metric_type" bson:"metric_type"` // 指标类型
	DataSource string                 `json:"data_source" bson:"data_source"` // 数据来源
	Filters    map[string]interface{} `json:"filters" bson:"filters"`         // 过滤条件
	Position   Position               `json:"position" bson:"position"`       // 位置
	Size       Size                   `json:"size" bson:"size"`               // 大小
	Options    map[string]interface{} `json:"options" bson:"options"`         // 配置选项
	CreatedAt  time.Time              `json:"created_at" bson:"created_at"`   // 创建时间
	UpdatedAt  time.Time              `json:"updated_at" bson:"updated_at"`   // 更新时间
}

// Position 位置信息
type Position struct {
	X int `json:"x" bson:"x"` // X坐标
	Y int `json:"y" bson:"y"` // Y坐标
}

// Size 大小信息
type Size struct {
	Width  int `json:"width" bson:"width"`   // 宽度
	Height int `json:"height" bson:"height"` // 高度
}

// ReportType 报表类型
type ReportType string

const (
	ReportTypeCall        ReportType = "call"        // 呼叫报表
	ReportTypeAgent       ReportType = "agent"       // 座席报表
	ReportTypeQueue       ReportType = "queue"       // 队列报表
	ReportTypePerformance ReportType = "performance" // 性能报表
	ReportTypeSystem      ReportType = "system"      // 系统报表
)

// ReportPeriod 报表周期
type ReportPeriod string

const (
	ReportPeriodHourly  ReportPeriod = "hourly"  // 小时
	ReportPeriodDaily   ReportPeriod = "daily"   // 日
	ReportPeriodWeekly  ReportPeriod = "weekly"  // 周
	ReportPeriodMonthly ReportPeriod = "monthly" // 月
	ReportPeriodCustom  ReportPeriod = "custom"  // 自定义
)

// Report 报表
type Report struct {
	ID             string                 `json:"id" bson:"_id"`
	Name           string                 `json:"name" bson:"name"`                       // 报表名称
	Type           ReportType             `json:"type" bson:"type"`                       // 报表类型
	Period         ReportPeriod           `json:"period" bson:"period"`                   // 报表周期
	StartDate      time.Time              `json:"start_date" bson:"start_date"`           // 开始日期
	EndDate        time.Time              `json:"end_date" bson:"end_date"`               // 结束日期
	Filters        map[string]interface{} `json:"filters" bson:"filters"`                 // 过滤条件
	Metrics        []string               `json:"metrics" bson:"metrics"`                 // 指标列表
	Recipients     []string               `json:"recipients" bson:"recipients"`           // 接收者列表
	IsScheduled    bool                   `json:"is_scheduled" bson:"is_scheduled"`       // 是否定时生成
	ScheduleConfig map[string]interface{} `json:"schedule_config" bson:"schedule_config"` // 定时配置
	Status         string                 `json:"status" bson:"status"`                   // 状态(pending/generating/completed/failed)
	GeneratedAt    time.Time              `json:"generated_at" bson:"generated_at"`       // 生成时间
	CreatorID      string                 `json:"creator_id" bson:"creator_id"`           // 创建者ID
	CreatedAt      time.Time              `json:"created_at" bson:"created_at"`           // 创建时间
	UpdatedAt      time.Time              `json:"updated_at" bson:"updated_at"`           // 更新时间
}

// ReportData 报表数据
type ReportData struct {
	ReportID  string                 `json:"report_id" bson:"report_id"`   // 报表ID
	Metadata  ReportMetadata         `json:"metadata" bson:"metadata"`     // 元数据
	Summary   map[string]interface{} `json:"summary" bson:"summary"`       // 汇总数据
	Detailed  []interface{}          `json:"detailed" bson:"detailed"`     // 详细数据
	Charts    []ChartData            `json:"charts" bson:"charts"`         // 图表数据
	CreatedAt time.Time              `json:"created_at" bson:"created_at"` // 创建时间
}

// ReportMetadata 报表元数据
type ReportMetadata struct {
	Title       string                 `json:"title"`        // 标题
	Description string                 `json:"description"`  // 描述
	GeneratedBy string                 `json:"generated_by"` // 生成者
	ReportType  string                 `json:"report_type"`  // 报表类型
	TimeRange   string                 `json:"time_range"`   // 时间范围
	Params      map[string]interface{} `json:"params"`       // 参数
}

// ChartData 图表数据
type ChartData struct {
	ID      string                 `json:"id"`      // 图表ID
	Type    string                 `json:"type"`    // 图表类型
	Title   string                 `json:"title"`   // 图表标题
	XAxis   AxisData               `json:"x_axis"`  // X轴数据
	YAxis   AxisData               `json:"y_axis"`  // Y轴数据
	Series  []SeriesData           `json:"series"`  // 系列数据
	Options map[string]interface{} `json:"options"` // 配置选项
}

// AxisData 坐标轴数据
type AxisData struct {
	Name    string                 `json:"name"`    // 轴名称
	Type    string                 `json:"type"`    // 轴类型
	Data    []interface{}          `json:"data"`    // 轴数据
	Options map[string]interface{} `json:"options"` // 配置选项
}

// SeriesData 系列数据
type SeriesData struct {
	Name    string                 `json:"name"`    // 系列名称
	Type    string                 `json:"type"`    // 数据类型
	Data    []interface{}          `json:"data"`    // 数据点
	Color   string                 `json:"color"`   // 颜色
	Options map[string]interface{} `json:"options"` // 配置选项
}

// CallReportData 呼叫报表数据
type CallReportData struct {
	Period          string    `json:"period"`           // 时间段标识
	TotalCalls      int64     `json:"total_calls"`      // 总呼叫数
	InboundCalls    int64     `json:"inbound_calls"`    // 呼入呼叫数
	OutboundCalls   int64     `json:"outbound_calls"`   // 呼出呼叫数
	AnsweredCalls   int64     `json:"answered_calls"`   // 已接听呼叫数
	MissedCalls     int64     `json:"missed_calls"`     // 未接听呼叫数
	AbandonedCalls  int64     `json:"abandoned_calls"`  // 放弃呼叫数
	TransferCalls   int64     `json:"transfer_calls"`   // 转接呼叫数
	ConferenceCalls int64     `json:"conference_calls"` // 会议呼叫数
	AvgWaitTime     float64   `json:"avg_wait_time"`    // 平均等待时间(秒)
	AvgTalkTime     float64   `json:"avg_talk_time"`    // 平均通话时间(秒)
	AvgWrapUpTime   float64   `json:"avg_wrap_up_time"` // 平均事后处理时间(秒)
	ServiceLevel    float64   `json:"service_level"`    // 服务水平(%)
	AbandonRate     float64   `json:"abandon_rate"`     // 放弃率(%)
	AnswerRate      float64   `json:"answer_rate"`      // 接通率(%)
	StartTime       time.Time `json:"start_time"`       // 开始时间
	EndTime         time.Time `json:"end_time"`         // 结束时间
}

// AgentReportData 座席报表数据
type AgentReportData struct {
	AgentID                   string  `json:"agent_id"`                    // 座席ID
	AgentName                 string  `json:"agent_name"`                  // 座席名称
	LoggedInTime              float64 `json:"logged_in_time"`              // 登录时长(分钟)
	AvailableTime             float64 `json:"available_time"`              // 可用时长(分钟)
	BusyTime                  float64 `json:"busy_time"`                   // 忙碌时长(分钟)
	WrapUpTime                float64 `json:"wrap_up_time"`                // 事后处理时长(分钟)
	BreakTime                 float64 `json:"break_time"`                  // 休息时长(分钟)
	HandledCalls              int64   `json:"handled_calls"`               // 处理呼叫数
	AvgTalkTime               float64 `json:"avg_talk_time"`               // 平均通话时间(秒)
	AvgWrapUpTime             float64 `json:"avg_wrap_up_time"`            // 平均事后处理时间(秒)
	TransferIn                int64   `json:"transfer_in"`                 // 转入呼叫数
	TransferOut               int64   `json:"transfer_out"`                // 转出呼叫数
	FirstCallResolutionRate   float64 `json:"first_call_resolution_rate"`  // 一次性解决率(%)
	CustomerSatisfactionScore float64 `json:"customer_satisfaction_score"` // 客户满意度分数
}

// QueueReportData 队列报表数据
type QueueReportData struct {
	QueueID         string  `json:"queue_id"`         // 队列ID
	QueueName       string  `json:"queue_name"`       // 队列名称
	CallsOffered    int64   `json:"calls_offered"`    // 提供的呼叫数
	CallsAnswered   int64   `json:"calls_answered"`   // 已接听呼叫数
	CallsAbandoned  int64   `json:"calls_abandoned"`  // 放弃呼叫数
	CallsOverflowed int64   `json:"calls_overflowed"` // 溢出呼叫数
	AvgWaitTime     float64 `json:"avg_wait_time"`    // 平均等待时间(秒)
	MaxWaitTime     float64 `json:"max_wait_time"`    // 最大等待时间(秒)
	AvgTalkTime     float64 `json:"avg_talk_time"`    // 平均通话时间(秒)
	ServiceLevel    float64 `json:"service_level"`    // 服务水平(%)
	AbandonRate     float64 `json:"abandon_rate"`     // 放弃率(%)
	AnswerRate      float64 `json:"answer_rate"`      // 接通率(%)
	AgentsLoggedIn  float64 `json:"agents_logged_in"` // 平均登录座席数
	AgentsAvailable float64 `json:"agents_available"` // 平均可用座席数
}

// MonitorAlert 监控告警
type MonitorAlert struct {
	ID            string    `json:"id" bson:"_id"`
	Name          string    `json:"name" bson:"name"`                   // 告警名称
	Type          string    `json:"type" bson:"type"`                   // 告警类型
	Metric        string    `json:"metric" bson:"metric"`               // 监控指标
	Condition     string    `json:"condition" bson:"condition"`         // 条件(>,<,>=,<=,==,!=)
	Threshold     float64   `json:"threshold" bson:"threshold"`         // 阈值
	Duration      int64     `json:"duration" bson:"duration"`           // 持续时间(秒)
	Severity      string    `json:"severity" bson:"severity"`           // 严重程度(low/medium/high/critical)
	IsActive      bool      `json:"is_active" bson:"is_active"`         // 是否激活
	Notifications []string  `json:"notifications" bson:"notifications"` // 通知方式(email/sms/webhook)
	Recipients    []string  `json:"recipients" bson:"recipients"`       // 接收者
	CreatedAt     time.Time `json:"created_at" bson:"created_at"`       // 创建时间
	UpdatedAt     time.Time `json:"updated_at" bson:"updated_at"`       // 更新时间
}

// AlertEvent 告警事件
type AlertEvent struct {
	ID           string                 `json:"id" bson:"_id"`
	AlertID      string                 `json:"alert_id" bson:"alert_id"`           // 关联的告警ID
	AlertName    string                 `json:"alert_name" bson:"alert_name"`       // 告警名称
	Metric       string                 `json:"metric" bson:"metric"`               // 指标名称
	CurrentValue float64                `json:"current_value" bson:"current_value"` // 当前值
	Threshold    float64                `json:"threshold" bson:"threshold"`         // 阈值
	Condition    string                 `json:"condition" bson:"condition"`         // 条件
	Severity     string                 `json:"severity" bson:"severity"`           // 严重程度
	Status       string                 `json:"status" bson:"status"`               // 状态(triggered/resolved)
	Details      map[string]interface{} `json:"details" bson:"details"`             // 详情
	TriggeredAt  time.Time              `json:"triggered_at" bson:"triggered_at"`   // 触发时间
	ResolvedAt   time.Time              `json:"resolved_at" bson:"resolved_at"`     // 解决时间
}
